package com.hyw.cm.common.protocal.spi;

/**
 * 抽象一个字节流解析器，其被调用的逻辑如下：
 * <p>
 * getIdentifyLength----->isSupport--(if true)-->create();
 * 
 * @author Hongyu
 */
public interface IDecoder<T> {

  default String getName() {
    return this.getClass().getSimpleName();
  }

  /**
   * 需要读取多少字节数以便于后续识别协议
   * 
   * @return
   */
  public int getIdentifyLength();

  /**
   * @param identifier
   *          由框架端根据{@link #getIdentifyLength()}自动传入
   * @return true,则代表当前协议的解析，可以介入。反之，则跳过。
   */
  public boolean isSupport(byte[] identifier);

  /**
   * 解析用的处理器
   * 
   * @return
   */
  public T create();

}
